import { resolve } from 'path'
import react from '@vitejs/plugin-react'
import AutoImport from 'unplugin-auto-import/vite'
import AntdResolver from 'unplugin-auto-import-antd'
import { defineConfig } from 'vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import tsconfigPaths from 'vite-tsconfig-paths'
import { visualizer } from 'rollup-plugin-visualizer'
import eslintPlugin from 'vite-plugin-eslint'
import UnoCSS from 'unocss/vite'
// import px2vw from "postcss-px-to-viewport";

// https://vitejs.dev/config/
export default defineConfig({
  base: './',
  // esbuild: {
  //   drop: ["console", "debugger"]
  // },
  resolve: {
    alias: {
      '@': resolve(__dirname, './src')
    }
  },
  css: {
    // 开css sourcemap方便找css
    devSourcemap: true,
    postcss: {
      plugins: [
        // px2vw({
        //   unitToConvert: "px", // 要转化的单位
        //   viewportWidth: 1920, // UI设计稿的宽度
        //   unitPrecision: 6, // 转换后的精度，即小数点位数
        //   propList: ["*"], // 指定转换的css属性的单位，*代表全部css属性的单位都进行转换
        //   viewportUnit: "vw", // 指定需要转换成的视窗单位，默认vw
        //   fontViewportUnit: "vw", // 指定字体需要转换成的视窗单位，默认vw
        //   selectorBlackList: [], // 指定不转换为视窗单位的类名，
        //   minPixelValue: 1, // 默认值1，小于或等于1px则不进行转换
        //   mediaQuery: true, // 是否在媒体查询的css代码中也进行转换，默认false
        //   replace: true, // 是否转换后直接更换属性值
        //   exclude: [], // 设置忽略文件，用正则做目录名匹配
        //   landscape: false // 是否处理横屏情况
        // })
      ]
    }
  },
  plugins: [
    AutoImport({
      eslintrc: {
        enabled: true,
        filepath: './.eslintrc-auto-import.json'
      },
      imports: ['react', 'react-router-dom'],
      dts: './auto-imports.d.ts',
      resolvers: [AntdResolver()]
    }),
    react(),
    // 同步tsconfig.json的path设置alias
    tsconfigPaths(),
    createSvgIconsPlugin({
      iconDirs: [resolve(process.cwd(), 'src/assets/icons')],
      symbolId: 'icon-[dir]-[name]'
    }),
    // esLint 报错信息显示在浏览器界面上
    eslintPlugin(),
    visualizer({ filename: 'stats.html', gzipSize: true, brotliSize: true }),
    UnoCSS()
  ],
  server: {
    // 自动打开浏览器
    open: true,
    host: true,
    port: 7777,
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, '')
      }
    }
  },
  build: {
    target: 'esnext',
    minify: 'terser',
    terserOptions: {
      compress: {
        // 生产环境移除console
        drop_console: true,
        drop_debugger: true
      }
    }
  }
})
